<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>闭包</title>
</head>
<body>
<script>
    /*
    1闭包是什么
        就是一个函数套一个函数就是闭包
        闭包是一个函数加上到创建函数的作用域的连接，闭包“关闭”了函数的自由变量
        闭包:闭包是有权访问一个函数外面的局部变量，且在外部函数调用结束被销毁后，依然可以使用。
    2.闭包可以解决什么问题[闭包的优点
        2.1内部函数可以访问到外部函数的局部变量
        2.2闭包可以解决的问题 :
        解析了全局变量污染的问题
    3闭包的缺点
        3.1变量会驻留在内存中，造成内存损耗问题。
            解决:把闭包的函数设置为nu11
        3.2内存泄漏[ie] ==>可说可不说，如果说一定要提到ie
* */

    var a = 100 //全局变量容易被污染和修改
    a = 300 // 被别人修改了

    // 普通函数
    function addA(){
        let a = 10
        a++
        console.log(a);
    }
    addA()
    addA() // 多次执行变量a会被回收



    // 为了a可以驻留在内存中不被回收 也不是全局变量 所以才有了闭包这个概念
    function addB(){
        let b = 88
        return function (){
            b++
            console.log(b);
        }
    }

    let fB =  addB() // 赋值 并不执行
    fB()
    fB()
    fB = null // 变量会驻留在内存中，造成内存损耗问题。 解决:把闭包的函数设置为nu11


    function addC(){
        let b = 88 // 这里的b虽然没有用到 但是浏览器的垃圾回收机制并不会回收
        function a (){

        }
        function b1 (){
            b++
            console.log(b);
        }
        return a
    }

    let faddc = addC()
    faddc()
    // faddc = null

</script>
</body>
</html>
